﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace Toto.Componentes
{
   class Campo
    {
       
        Texture2D fundo, mesa, bola; //Fundo é a grama verde. Mesa é a lateral de madeira da mesa.
        Song musica;
        Eixo eixo1, eixo2, eixo3, eixo4;
        Eixo eixo5, eixo6, eixo7, eixo8;
        bool time = false; //time de baixo = true time ce cima = false
        Rectangle gramado;
        Vector2 PosIni;
        Bola pelota;
        int[] formacao;

 
        /// <summary>
        /// Contrutor do Campo. Carrega apenas a imagem do campo.
        /// </summary>
        /// <param name="fundo">Textura correspondente ao campo</param>
        public Campo( Vector2 PosIni)
        {
            this.PosIni = PosIni;
            this.fundo = Textura.texturaCampo;
            this.mesa = Textura.texturaMesa;
            this.bola = Textura.texturaBola;
            formacao = Formacao.getFormacao();
            gramado = fundo.Bounds;            
            gramado.X = (int)PosIni.X;
            gramado.Y = (int)PosIni.Y;
            pelota = new Bola(gramado,new Rectangle(0, 0, 32, 32));
            
        }

        /// <summary>
        /// Construtor do Campo. Carrega a imagem do campo e a música de fundo.
        /// </summary>
        /// <param name="fundo">Textura correspondente ao campo</param>
        /// <param name="musica">Música de fundo</param>
        public Campo(Texture2D fundo, Song musica)
        {
            this.fundo = fundo;
            this.musica = musica;
        }

        /// <summary>
        /// Atualiza a posição dos eixos.
        /// </summary>
        /// <param name="gameTime">gameTime</param>
        public void Update(GameTime gameTime)
        {
            eixo1.Update();
            eixo2.Update();
            eixo3.Update();
            eixo4.Update();
            eixo5.Update();
            eixo6.Update();
            eixo7.Update();
            eixo8.Update();

            pelota.Update(gameTime);
        }

        /// <summary>
        /// Cria os eixos com a formação desejada.
        /// </summary>
        /// <param name="formacao">Vetor contendo a formação desejada</param>
        /// <param name="texturaBarra">Textura correspondente à barra do eixo</param>
        /// <param name="texturaBoneco">Textura correspondente aos bonecos</param>
        /// <param name="gameWindow">Janela do jogo</param>
        public void GerarEixos()
        {
            eixo1 = new Eixo(time = true, new Vector2(gramado.X+10,gramado.Y+0), 1, 1,new List<Keys>() {Keys.Up, Keys.Down,Keys.D1},this.pelota);
            eixo2 = new Eixo(time = true, new Vector2(gramado.X + 100, gramado.Y + 0), formacao[0], 1, new List<Keys>() { Keys.Up, Keys.Down, Keys.D2 },this.pelota);
            eixo3 = new Eixo(time = true, new Vector2(gramado.X + 350, gramado.Y + 0), formacao[1], 1, new List<Keys>() { Keys.Up, Keys.Down, Keys.D3 },this.pelota);
            eixo4 = new Eixo(time = true, new Vector2(gramado.X + 670, gramado.Y + 0), formacao[2], 1, new List<Keys>() { Keys.Up, Keys.Down, Keys.D4 },this.pelota);

            eixo5 = new Eixo(time = false, new Vector2(gramado.X + 875, gramado.Y + 0), 1, 2, new List<Keys>() { Keys.Up, Keys.Down, Keys.D8 },this.pelota);
            eixo6 = new Eixo(time = false, new Vector2(gramado.X + 785, gramado.Y + 0),  formacao[0], 2, new List<Keys>() { Keys.Up, Keys.Down, Keys.D7 },this.pelota);
            eixo7 = new Eixo(time = false, new Vector2(gramado.X + 535, gramado.Y + 0),  formacao[1], 2, new List<Keys>() { Keys.Up, Keys.Down, Keys.D6 },this.pelota);
            eixo8 = new Eixo(time = false, new Vector2(gramado.X + 215, gramado.Y + 0),  formacao[2], 2, new List<Keys>() { Keys.Up, Keys.Down, Keys.D5 },this.pelota);
        }


        /// <summary>
        /// Desenha o campo e os eixos nele contidos.
        /// </summary>
        /// <param name="spriteBatch">spriteBatch</param>
        /// <param name="gameTime">gameTime</param>
        public void Draw(SpriteBatch spriteBatch, GameTime gameTime)
        {
            spriteBatch.Draw(mesa, Vector2.Zero, Color.White);
            spriteBatch.Draw(fundo, PosIni, Color.White);
            

            eixo1.Draw(spriteBatch, gameTime);
            eixo2.Draw(spriteBatch, gameTime);
            eixo3.Draw(spriteBatch, gameTime);
            eixo4.Draw(spriteBatch, gameTime);
            eixo5.Draw(spriteBatch, gameTime);
            eixo6.Draw(spriteBatch, gameTime);
            eixo7.Draw(spriteBatch, gameTime);
            eixo8.Draw(spriteBatch, gameTime);

            pelota.Draw(spriteBatch, gameTime);

        }
        public Bola passaBola()
        {

            return this.pelota;
        }


    }
}
